package com.hq.learnmybatisplus.config;

import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import com.hq.learnmybatisplus.filter.MySqlParserFilter;
import com.hq.learnmybatisplus.handler.MyTenantHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

/**
 * 分页插件  基于拦截时机所以 也可以用于实现多租户（软件架构 用户间的数据隔离） 不一定要分页的才能用多租户
 * @see com.hq.learnmybatisplus.MultiTenantTest
 * @author hq
 */
@Configuration
public class PaginationInterceptorConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

        //sql解析器
        ArrayList<ISqlParser> sqlParsersList = new ArrayList<>();
        //多租户sql解析器
        TenantSqlParser tenantSqlParser = new TenantSqlParser();
        tenantSqlParser.setTenantHandler(new MyTenantHandler());
        sqlParsersList.add(tenantSqlParser);
        //多租户数据过来，添加到拦截器中 方便后面的测试 屏蔽
        //paginationInterceptor.setSqlParserList(sqlParsersList);


        //特定sql语句过滤或不过滤配置   也可以通过 @SqlParser 注释到方法上进行过滤或不过滤配置
        paginationInterceptor.setSqlParserFilter(new MySqlParserFilter());
        return paginationInterceptor;
    }

}
